草庐IT

Java HotSpot 枚举开销

全部标签

c++ - 在 C 枚举错误中使用单词 "SING"到 "expected an identifier"

在头文件中我有以下枚举:namespaceOBJ_VERBS{enum{zero,CUDDLE,EMBRACE,FLIP,GROPE,HUG,KISS,LICK,NUDGE,PAT,PINCH,POKE,PULL,RUB,SHAKE,SQUEEZE,TAP,TUG,TURN,WAVE,PEER,PET,CLENCH,CURSE,NUZZLE,SNAP,STROKE,TWIRL,LEAN,GRIP,SMELL,GRUNT,SQUEAL,SCOLD,GAZE,WIND,SPIT,SPIN,DANCE,SING,zTOTAL};constint_MAX_=int(OBJ_VERBS::zTO

c++ - 应用关于如何递增枚举的规则

有没有办法改变枚举设置其常量值的方式?通常它会递增一个,但我想应用另一个规则。在PAWN中这会起作用enum(有没有办法在C++中做到这一点? 最佳答案 不是自动的,但是你可以手动指定每个值enumX{a=0x01,b=0x02,c=0x04}; 关于c++-应用关于如何递增枚举的规则,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/28808848/

c++ - 返回(大)对象时复制开销?

考虑以下两个简单的Matrix4x4Identity方法的实现。1:这个以一个Matrix4x4引用为参数,直接写入数据。staticvoidCreateIdentity(Matrix4x4&outMatrix){for(inti=0;i2:这个返回Matrix4x4而不接受任何输入。staticMatrix4x4CreateIdentity(){Matrix4x4outMatrix;for(inti=0;i现在,如果我想实际创建一个单位矩阵,我必须这样做Matrix4x4mat;Matrix4x4::CreateIdentity(mat);对于第一个变体和Matrix4x4mat=M

c++ - 安全地将整数与强类型枚举进行比较

当整数值可能不在枚举值范围内时,如何安全地将未知类型的整数值与强类型枚举进行比较?将整数值与枚举进行比较的最明显方法是将整数值a转换为枚举类型E,然后与枚举值b,像这样:templateboolcompare(Ia,Eb){returnstatic_cast(a)==b;}但是,如果a不在枚举值范围内,这将导致未指定的行为,根据[expr.static.cast]/10:Avalueofintegralorenumerationtypecanbeexplicitlyconvertedtoanenumerationtype.Thevalueisunchangediftheoriginal

c++ - 模板中的无名枚举

很多模板化代码看起来像这样:templateclassfoo{enum{value=};};例子可见here在质数检查程序中,我也曾经在Factorial实现中看到过它。我的问题是为什么要使用无名枚举?这有什么特别的原因吗?例如,staticconstint也可以工作吗?编辑:@Benoît:感谢提供链接,它提供了我正在寻找的见解! 最佳答案 静态常量变量会占用内存(如Sean所说),而枚举不占用任何内存。它们只存在于编译器的世界中。在运行时,它们只是普通整数。除此之外,它还可以工作,除非编译器对标准的执行不当。有一个彻底的thre

c++ - 封装私有(private)枚举

之前我已经在类的头文件中定义了旨在私有(private)的枚举类型。private:enumfoo{a,b,c};但是,我不想再公开枚举的详细信息。在实现中定义枚举是否类似于定义类不变量?constintClassA::bar=3;enumClassA::foo{a,b,c};我想知道这是否是正确的语法。 最佳答案 C++没有枚举的前向声明,因此您不能将枚举“类型”与枚举“实现”分开。在C++0x中以下是可能的://foo.hclassfoo{enumbar:int;//mustspecifybasetypebarx;//canus

c++ - Intel TBB 并行化开销

为什么英特尔线程构建模块(TBB)parallel_for的开销如此之大?根据Tutorial.pdf中的3.2.2AutomaticChunking部分,它大约需要半毫秒。这是教程中的一个例子:CAUTION:Typicallyaloopneedstotakeatleastamillionclockcyclesforparallel_fortoimproveitsperformance.Forexample,aloopthattakesatleast500microsecondsona2GHzprocessormightbenefitfromparallel_for.根据我目前所读到

c++ - 迭代与。枚举

对于迭代,我知道有不同类型的迭代器前向、双向、随机访问,可用于访问数组中的项目。对于枚举,我只听说过可以用来索引项的枚举。但是是否有称为“枚举”或枚举器的术语?如果是这样,那么迭代和枚举之间有什么区别? 最佳答案 术语确实与语言相关,并且变得非常困惑。在C++中,“enumeration”(enum)是一个名称,意思是“一堆编号的项目”,所以没有Action进行;这只是一个东西(就像一个class)。当然,“迭代ion”指的是一个Action,意思是“多次重复一个Action”。通常,这伴随着浏览项目列表。但是,在某些语言中,作为A

c++ - 关于 C++ 枚举的问题

我试过像这样在for循环中使用枚举:enumfoo{foo_0,foo_1,foo_2,foo_3,...foo_n,foo_count};for(foof=foo_0;f我有一个编译错误。我知道这是无效的,因为++f可能不是有效的foo枚举-在这种情况下不是,但在一般情况下,所以我将for循环切换为:for(foof=foo_0;f编译正常。但这引发了以下问题。如果我有fallowing语句会怎样?foof=foo(k);//kisnotavalidfoovalue这是未定义的行为吗?编辑:k是一个int,它在foo中没有任何对应的值编辑2:enumfoo{foo_0,foo_1,f

c++ - OpenCL 或 CUDA 调用的开销?

我正在编写一个函数来处理很多BLASgemv操作。我希望能够在GPU上执行此操作,并且我已尝试使用cuBlas。我的问题是我的矩阵和vector相当小,100x100矩阵和100vector。与CPU相比,CuBlas需要很长时间,我知道为什么,CPU上的快速缓存和调用GPU的大量开销混合在一起。因此,我正在尝试找出一种聪明的方法来测量将调用传递给GPU所需的时间。这是CUDA设置调用并将其发送到图形处理器所花费的时间——不包括执行矩阵vector乘法实际花费的时间。我该怎么做? 最佳答案 更新:以下结果是针对2005硬件(nVid